"""
和图片操作相关的模块
"""
import pygame
import position as position_mo


def load_img(img_path: str, is_transparent: bool = True) -> pygame.Surface:
    """
    根据图片资源的路径加载图片生成图片对象
    :param img_path: 图片资源的路径
    :param is_transparent: 图片的背景是否为透明
    :return: 图片对象
    """
    if is_transparent:
        return pygame.image.load(img_path).convert_alpha()
    else:
        return pygame.image.load(img_path).convert()


def draw_img(
        img: str | pygame.Surface,
        target: pygame.Surface,
        position: tuple[float | int, float | int] = (0, 0),
        size: tuple[float | int, float | int] = None,
        is_scale: bool = False,
        rotate_degree: float | int | None = None,
        is_h_center: bool = False,
        is_v_center: bool = False
) -> tuple[pygame.Surface, pygame.Rect]:
    """
    将图片绘制到指定的 Surface 对象中
    :param img: 图片
    :param target: 图片要绘制到的目标 Surface 对象
    :param position: 图片在目标 Surface 对象中绘制的位置
    :param size: 图片绘制的大小，如果为 None，则完整绘制图片
    :param is_scale: 图片是否跟随指定的图片绘制大小进行缩放，以确保图片能够完整显示
    :param rotate_degree: 指定图片的旋转角度
    :param is_h_center: 图片是否在水平方式上居中
    :param is_v_center: 图片是否在垂直方式上居中
    :return: 图片画布对象和图片画布 Rect 对象组成的元组
    """
    img_obj = None
    # 对图片进行预处理
    if isinstance(img, str):
        img_obj = load_img(img)
    else:
        img_obj = img
    # 处理图片绘制的位置
    position = position_mo.center(img_obj, target, position, is_h_center, is_v_center)
    # 预处理绘制图片的大小
    if size is None:
        size = (img_obj.get_width(), img_obj.get_height())
    # 绘制的图片是否完整覆盖绘制到的 Surface 对象
    if is_scale:
        img_obj = pygame.transform.scale(img_obj, size)
    # 创建画布
    canvas = pygame.Surface(size).convert_alpha()
    # 设置画布的默认填充颜色为透明
    canvas.fill((0, 0, 0, 0))
    # 在画布中绘制图片
    canvas.blit(img_obj, (0, 0))
    # 对画布进行旋转处理
    if rotate_degree is not None:
        canvas = pygame.transform.rotate(canvas, rotate_degree)
    # 在目标中绘制画布
    canvas_rect = target.blit(canvas, position)
    return canvas, canvas_rect
